const _ = require('lodash')
const o = {
  name: 'zhangs',
  tools: {
    sing: 'yes',
    dance: 'no'
  }
}

// todo 浅拷贝
// !方法一 展开运算符
const oo = { ...o }
oo.tools.sing = 'no'
console.log(o)

// !方法二 Object.assign()
// const oo = Object.assign({}, o)

// !方法三 slice和concat (适用于数组)

// todo 深拷贝
// !方法一 JSON序列化
// const deepO = JSON.parse(JSON.stringify(o))
// deepO.tools.sing = 'yesyes!!!'
// console.log(o)

// !方法二 递归
// function deepCopy(obj) {
//   let copy = Array.isArray(obj) ? [] : {}
//   if (typeof obj !== 'object' || obj === null) {
//     return obj
//   }
//   for (let key in obj) {
//     if (obj.hasOwnProperty(key)) {
//       copy[key] = deepCopy(obj[key])
//     }
//   }
//   return copy
// }
// const newO = deepCopy(o)
// newO.tools.sing = 'yes!!!'
// console.log(o);

// !方法三 使用第三方库lodash
const newOO = _.cloneDeep(o)
newOO.tools.dance = 'no!!!'
console.log(o, newOO)
